package pr1.gui;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.SQLException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import pr1.bdd.Usuario;

public class EditarUsario extends JFrame {

	private JPanel contentPane;
	private JTextField textField;
	private JTextField textField_1;
	private Integer[] anos;
	private Usuario usuario;
	private Usuario usuarioNuevo;
	private String file;
	private JLabel avatarLabel;

	private ImageIcon icon;
	private GUIController gui;

	private JComboBox diasCombo;
	private JComboBox mesCombo;
	private JComboBox anoCombo;

	/**
	 * Create the frame.
	 */
	public EditarUsario(Usuario usuario, GUIController gui) {
		super("Editar información");
		this.usuario = usuario;
		this.gui = gui;
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 319);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JLabel nickLabel = new JLabel("Nick: ");

		nickLabel.setFont(new Font("Tahoma", Font.BOLD, 11));
		nickLabel.setBounds(10, 24, 29, 14);
		contentPane.add(nickLabel);

		textField = new JTextField(usuario.getNick());
		textField.setBounds(47, 21, 98, 20);
		contentPane.add(textField);
		textField.setColumns(10);

		JLabel lblContrasea = new JLabel("Contraseña:");
		lblContrasea.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblContrasea.setBounds(10, 54, 74, 14);
		contentPane.add(lblContrasea);

		textField_1 = new JTextField(usuario.getPassword());
		textField_1.setBounds(91, 51, 166, 20);
		contentPane.add(textField_1);
		textField_1.setColumns(10);

		JLabel lblFechaDeNacimiento = new JLabel("Fecha de nacimiento: ");
		lblFechaDeNacimiento.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblFechaDeNacimiento.setBounds(10, 92, 135, 14);
		contentPane.add(lblFechaDeNacimiento);

		Integer[] dias = new Integer[31];
		for (int i = 0; i < dias.length; i++) {
			dias[i] = i + 1;
		}
		diasCombo = new JComboBox(dias);
		if (usuario.getFechaNacimiento() != null) {
			diasCombo
					.setSelectedIndex(usuario.getFechaNacimiento().getDate() - 1);
		}
		diasCombo.setBounds(148, 89, 56, 20);
		contentPane.add(diasCombo);

		Integer[] meses = new Integer[12];
		for (int i = 0; i < meses.length; i++) {
			meses[i] = i + 1;
		}

		mesCombo = new JComboBox(meses);
		mesCombo.setBounds(214, 89, 53, 20);
		if (usuario.getFechaNacimiento() != null) {
			mesCombo.setSelectedIndex(usuario.getFechaNacimiento().getMonth());
		}
		contentPane.add(mesCombo);

		anos = new Integer[110];
		anos[0] = 2010;
		for (int i = 1; i < anos.length; i++) {
			anos[i] = anos[i - 1] - 1;
		}

		anoCombo = new JComboBox(anos);
		anoCombo.setBounds(277, 89, 74, 20);
		if (usuario.getFechaNacimiento() != null) {
			anoCombo.setSelectedIndex(getAno());
		}
		contentPane.add(anoCombo);

		JLabel lblAvatar = new JLabel("Avatar:");
		lblAvatar.setFont(new Font("Tahoma", Font.BOLD, 11));
		try {

			icon = new ImageIcon(usuario.getFoto().getBytes(1L,
					(int) usuario.getFoto().length()));

		} catch (SQLException e) {
			e.printStackTrace();
		}

		lblAvatar.setBounds(10, 117, 46, 14);
		contentPane.add(lblAvatar);

		JButton btnGuardar = new JButton("Guardar");
		btnGuardar.addActionListener(new AceptarListener());
		btnGuardar.setBounds(115, 247, 89, 23);
		contentPane.add(btnGuardar);

		JButton btnCerrar = new JButton("Cerrar");
		btnCerrar.addActionListener(new CerrarListener());
		btnCerrar.setBounds(221, 247, 89, 23);
		contentPane.add(btnCerrar);

		avatarLabel = new JLabel(icon);
		avatarLabel.setBounds(10, 140, 89, 90);
		contentPane.add(avatarLabel);

		JButton btnExaminarFoto = new JButton("Examinar foto");
		btnExaminarFoto.addActionListener(new ExaminarListener());
		btnExaminarFoto.setBounds(115, 140, 142, 23);
		contentPane.add(btnExaminarFoto);

		setVisible(true);
		this.setLocationRelativeTo(null);
	}

	private int getAno() {
		for (int i = 1; i < anos.length; i++) {
			if (anos[i] == this.usuario.getFechaNacimiento().getYear() + 1900)
				return i;
		}
		return 0;
	}

	private class CerrarListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent arg0) {
			setVisible(false);

		}

	}

	private class ExaminarListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent arg0) {
			JPanel panel = new JPanel();
			JFileChooser chooser = new JFileChooser();
			chooser.setCurrentDirectory(new File("src/pr1/gui/imagenes"));
			chooser.showOpenDialog(panel);
			panel.setVisible(true);
			chooser.setVisible(true);
			file = chooser.getSelectedFile().getPath(); // direccion de la foto
														// seleccionada
			actualizaFoto(file);

		}

	}

	private class AceptarListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			FileInputStream fis = null;
			;
			try {
				if (file != null)
					fis = new FileInputStream(file);
				else
					fis = new FileInputStream("src/pr1/gui/imagenes/avatar.png");
			} catch (FileNotFoundException ex) {
				System.out.println("Foto no encontrada");
			}

			usuarioNuevo = new Usuario(textField.getText(),
					textField_1.getText(), null, null);
			gui.editarUsuario(usuarioNuevo, fis, usuario.getNick(),
					construyeFecha());
			
			setVisible(false);

		}

	}

	private void actualizaFoto(String file) {
		this.avatarLabel.setIcon(new ImageIcon(file));
	}

	private String construyeFecha() {
		String elDia;
		int dia = Integer.parseInt(this.diasCombo.getSelectedItem().toString());
		if (dia < 10) {
			elDia = "0" + Integer.toString(dia);
		} else
			elDia = Integer.toString(dia);

		String elMes = "";
		int mes = Integer.parseInt(this.mesCombo.getSelectedItem().toString());
		if (mes < 10) {
			elMes = "0" + Integer.toString(mes);
		} else
			elMes = Integer.toString(mes);

		String ano = this.anoCombo.getSelectedItem().toString();
		//String fecha = "\'" + ano + "-" + elMes + "-" + elDia + "\'";
		String fecha = ano + "-" + elMes + "-" + elDia;
		return fecha;

	}

}
